"""
@Author  : 康帅
@Time    : 2021/6/23 10:21
@Function: urllib逆解析
"""

from urllib.parse import urlparse, urlunparse


def urllib_parse_geturl():
    """
    要把拆分后的 URL 的各部分重新组装回去，
    得到一个完整 URL 字符串的方法不止有一种。
    解析后的 URL 对象有一个 geturl() 方法
    :return:
    """
    original = 'http://netloc/path;param?query=arg#frag'
    print('ORIG  :', original)
    parsed = urlparse(original)
    # geturl() 只对 urlparse() 或 urlsplit() 返回的对象有效
    print('PARSED:', parsed.geturl())


def urllib_parse_urlunparse():
    """
    可以用 urlunparse() 将一个常规的字符串元组组装为一个 URL 地址
    :return:
    """
    original = 'http://netloc/path;param?query=arg#frag'
    print('ORIG  :', original)
    parsed = urlparse(original)
    print('PARSED:', type(parsed), parsed)
    t = parsed[:]
    print('TUPLE :', type(t), t)
    print('NEW   :', urlunparse(t))


def urllib_parse_urlunparseextra():
    """
    如果作为输入的 URL 包含多余的部分，
    则它们可能会在重组过程中被丢弃
    :return:
    """
    original = 'http://netloc/path;?#'
    print('ORIG  :', original)
    parsed = urlparse(original)
    print('PARSED:', type(parsed), parsed)
    t = parsed[:]
    print('TUPLE :', type(t), t)
    print('NEW   :', urlunparse(t))


if __name__ == '__main__':
    urllib_parse_geturl()
    urllib_parse_urlunparse()
    urllib_parse_urlunparseextra()
